package org.personal.struts.action;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class DefaultAction extends ActionSupport{

	private static final long serialVersionUID = -6544342288361497487L;
	private String pagePath;
	private String root;
	private String jsp;
	private String html;
	public static void main(String[] args) {
		String str="html,htmls,jsp,php,,";
		System.out.println(str);
		str=str.replaceAll("(^,+)|(,+$)","");
		System.out.println(str);
		boolean r = str.matches("(^html$)|(^html,.+$)|(.+,html$)|(.+,html,.+)");//
		System.out.println(r);
	}
	
	/* 如果找不到的Action都将请求到这里,
	 * 假设jsp后缀改为html,那么这个文件名将优先去查找Action name是否存在,存在就执行,将不会运行到此处.
	 * 这将导致配置的后缀文件名与Action name 有可能冲突,所以建议Action name不要取与任何文件名相同的名字
	 * (non-Javadoc)
	 * @see com.opensymphony.xwork2.ActionSupport#execute()
	 */
	public String execute() throws Exception {
		//此Action未经过struts2的默认拦截器,故只能如此获得HttpServletRequest
		HttpServletRequest request=ServletActionContext.getRequest();
		String servletPaht=request.getServletPath();
		
		//获得servlet后缀,如果有的话
		String suffix="";
		int idx=servletPaht.lastIndexOf(".");
		if(idx!=-1){
			suffix=servletPaht.substring(idx+1);
		}
		
		
		 //如果请求的是WebRoot下的根文件对象,当然此文件名已经查找Struts2配置的Action请求,没有则到此处,
		if(servletPaht.matches("/\\w+\\.("+(jsp+","+html).replaceAll("(^,+)|(,+$)","").replaceAll(",+","|")+")$")||suffix.equals("jsp")){
			this.setPagePath(servletPaht);
			return SUCCESS;
		}
		
		//如果servlet请求是jsp文件,则响应错误页面
		if(suffix.equals("jsp")){
			return ERROR;
		}
		
		//如果servlet请求是配置的文件后缀,实则是html文件,则响应这个文件名的HTML页面
		if(html.replaceAll("(^,+)|(,+$)","").matches("(^"+suffix+"$)|(^"+suffix+",.+$)|(.+,"+suffix+"$)|(.+,"+suffix+",.+)")){
			
			//...
			
		//如果servlet请求是配置的文件后缀,实则是jsp文件,则响应这个文件名的JSP页面
		}else if(jsp.replaceAll("(^,+)|(,+$)","").matches("(^"+suffix+"$)|(^"+suffix+",.+$)|(.+,"+suffix+"$)|(.+,"+suffix+",.+)")){
			servletPaht=servletPaht.replaceAll("\\."+suffix+"$",".jsp");
		
		//否则页面不存在, struts2配置不存在并与配置的后缀没有匹配
		}else{
			return ERROR;
		}
		//设置页面的根文件夹 加上 servlet请求的URL,响应该页
		this.setPagePath(root+servletPaht);
		return SUCCESS;
	}

	public String getPagePath() {
		return pagePath;
	}

	public void setPagePath(String pagePath) {
		this.pagePath = pagePath;
	}

	public void setRoot(String root) {
		this.root = root;
	}

	public void setJsp(String jsp) {
		this.jsp = jsp;
	}

	public void setHtml(String html) {
		this.html = html;
	}


		
}
